class clustering_grass
{
  public:
    // To test with vectorial data
    inline	clustering_grass(); 

    // Grassmann clustering
    inline	clustering_grass( std::string in_Gpointsfile);
    
    inline	void ker_cluster(std::string save_ker, std::string save_part, std::string GT, int summ_percentage);  //Using Kernel Kmeans
    inline	void euc_cluster(std::string save_ker, std::string save_part, std::string GT, int summ_percentage); //Using Euclidean kmeans. m used to selec the top m eigenvectors
    inline 	uvec get_performance();
    
  private:
    //No lo puedo poner asi por el contructor vacio clustering_grass(); 
    //const field<std::string>  person_list;
    //const field<std::string>  action_list;
    //const double vec_size;
    //const int p;
    
    
    std::string Gpointsfile;
    
    
    field<mat> 		grass_points;
     

    uword 	Ncent;
    uvec performance;
   
    //uword	N_points;
 
 


    
    inline void		test_vecdata();
    inline mat		new_points(mat Kn, int m);
    inline mat		calc_kernel_test(mat vec_data); 

    inline void 	run_kkmeans(mat K, uword max_iter, uword Ncent, std::string part_name, std::string GT); 
    inline void		opt_run_kkmeans(mat K, uword max_iter, uword Ncent, std::string part_name, std::string GT);
    inline void 	run_kmeans (mat new_datadata, uword max_iter, uword Ncent, std::string part_name, std::string GT); 
    
    
    inline mat		cal_dist_ker(mat K);

    


  
};